home *** CD-ROM | disk | FTP | other *** search
Text File | 1999-12-05 | 39.2 KB | 2,107 lines |
- * Xpicw.s
-
- .include DOSCALL.MAC
- .include IOCSCALL.MAC
- .include Xpicw.INC
- .include SYS_FPIC.mac
-
- .xref _Fpic_keep,_Fpic_disp,_Fpic_free,_Fpic_set_buf
- .xref load_text,wl_load
-
-
- .offset 8 * 引き数
- _source_ptr: .ds.l 1
- _dest_ptr: .ds.l 1
- _speed: .ds.l 1
-
-
- GRAY0 equ 4<<11+4<<6+4<<1
- GRAY1 equ 16<<11+16<<6+16<<1
-
-
- CSRSWITCH equ $000992 *b カーソル表示スイッチ(<>0で表示)
-
- GVRAM equ $c0_0000
- TEXTVRAM equ $e0_0000
-
- CRTC_R00 equ $e8_0000
- CRTC_R01 equ $e8_0002
- CRTC_R02 equ $e8_0004
- CRTC_R12 equ $e8_0018
- CRTC_R20 equ $e8_0028
- CRTC_R21 equ $e8_002a
- CRTC_R22 equ $e8_002c
-
- GRPALET equ $e8_2000
- VCTRL_R01 equ $e8_2400
- VCTRL_R02 equ $e8_2500
- VCTRL_R03 equ $e8_2600
- CRTC_PORT equ $e8_0480 * CRTC 動作設定ポート
- GPIP_DATA equ $e8_8001
-
-
- ZMUSIC .macro func
- moveq.l #func,d1
- trap #3
- .endm
-
- picture_sync equ $43
- get_play_work equ $3c
-
- p_total equ $3c * ステップタイム合計 (.L)
-
-
-
-
- .text
- .even
-
- bra.s @f
- .dc.b '#HUPAIR',0
- @@:
- clr.l a5
-
-
- lea.l $10(a0),a0 *メモリブロックの変更
- suba.l a0,a1
- pea.l (a1)
- pea.l (a0)
- DOS _SETBLOCK
- addq.w #8,sp
-
-
- move.l #WORKSIZE+STACKSIZE,-(sp)
- DOS _MALLOC
- addq.w #4,sp
- tst.l d0
- bmi less_mem_err
- movea.l d0,a5 * a5.l = ワーク(以後変更無し)
- lea.l WORKSIZE+STACKSIZE(a5),sp
-
- * ワークをクリア
- movea.l a5,a0
- move.w #WORKSIZE/4-1,d0
- moveq.l #0,d1
- @@: move.l d1,(a0)+
- dbra d0,@b
-
- move.l sp,tini_usp(a5) * エラー時にスタックを一気に戻すため
-
-
- *********************************************************
- INIT:
- lea.l CSRSWITCH,a1
- IOCS _B_WPEEK
- move.w d0,old_csrswitch(a5) * カーソルの表示モードを取得
-
- IOCS _OS_CUROF * カーソル表示一時停止
-
- move.w #3,-(sp) * ファンクションキー表示オフ
- move.w #14,-(sp)
- DOS _CONCTRL
- addq.w #4,sp
-
- moveq.l #0,d1
- IOCS _SKEY_MOD
-
- clr.w -(sp)
- DOS _KFLUSH
- addq.w #2,sp
-
-
- moveq.l #0,d1 * グラフィック画面が
- moveq.l #-1,d2 * 使用中かチェック
- IOCS _TGUSEMD
- cmpi.b #1,d0 * システムで使用中か?
- beq tgusemd_err
- cmpi.b #2,d0 * アプリケーションで使用中か?
- beq tgusemd_err
-
- * 環境変数 SLASH を取得
- link a6,#-256
- pea.l -256(a6)
- clr.l -(sp)
- pea.l SLASH_strZ(pc)
- DOS _GETENV
- lea.l 12(sp),sp
- tst.l d0
- bmi INIT_no_slash
- cmpi.b #'/',-256(a6) * 環境変数 SLASH=/ なら
- seq.b slash_flag(a5) * フラグをセット
- INIT_no_slash:
- unlk a6
-
-
- tst.b (a2)+
- beq usage
-
- st.b init_screen_1st_flag(a5)
- sf.b crlf_flag(a5)
-
- *********************************************************
- analyse_cmdline: * コマンドラインの解析
- * インダイレクトファイルと COMMAND.X と HUPAIR を両立させるため
- * ややこしい事になってます…
- * in : a2.l = コマンドライン
- analyse_cmdline_loop:
- move.b (a2)+,d0
- beq analyse_cmdline_next
- cmpi.b #$1a,d0
- beq analyse_cmdline_crlf
- cmpi.b #$0d,d0
- beq analyse_cmdline_crlf
- cmpi.b #$0a,d0
- beq analyse_cmdline_crlf
- cmpi.b #' ',d0
- beq analyse_cmdline_loop
- cmpi.b #$09,d0
- beq analyse_cmdline_loop
- cmpi.b #'-',d0
- beq analyse_cmdline_option
- tst.b slash_flag(a5) * 環境変数 SLASH=/ なら
- bne analyse_cmdline_fname * / はパス区切り記号
- cmpi.b #'/',d0
- beq analyse_cmdline_option
- bra analyse_cmdline_fname
-
- analyse_cmdline_crlf:
- st.b crlf_flag(a5)
-
- analyse_cmdline_next:
- tst.b C_option_flag2(a5) * -C オプションのみ( .PIC ファイル名無し)に対処
- beq 1f
- sf.b C_option_flag2(a5)
- bra 2f
- 1:
- tst.b A_option_flag(a5) * -A オプションのみ( .PIC ファイル名無し)に対処
- beq 3f
- 2:
- movem.l d1-d7/a1-a6,-(sp) **
- bsr disp * 表示
- movem.l (sp)+,d1-d7/a1-a6 **
- 3:
-
- tst.b crlf_flag(a5)
- beq @f
-
- sf.b crlf_flag(a5)
- clr.l wl_ptr(a5)
- clr.l wl_entry(a5)
- clr.l clear_wl_ptr(a5)
- clr.l clear_wl_entry(a5)
- clr.l speed(a5)
- clr.l clear_speed(a5)
- clr.l S_option_speed(a5)
- clr.l D_option_speed(a5)
- clr.b wl_fname(a5)
- clr.b clear_wl_fname(a5)
- sf.b C_option_flag(a5)
- sf.b L_option_flag(a5)
- sf.b M_option_flag(a5)
- sf.b K_option_flag(a5)
- sf.b Y_option_flag(a5)
- sf.b CR_option_flag(a5)
- sf.b WR_option_flag(a5)
- sf.b square_flag(a5)
- sf.b C_option_flag2(a5)
- sf.b A_option_flag(a5)
- sf.b F_option_flag(a5)
- clr.l time0(a5)
- clr.l time1(a5)
- clr.w zm_track(a5)
- clr.l zm_track_work(a5)
- clr.l zm_counter(a5)
- @@:
- move.b -1(a2),d0
- beq analyse_cmdline_rts
- cmpi.b #$1a,d0
- bne analyse_cmdline_loop
-
-
- analyse_cmdline_rts:
- bra TINI
-
-
-
- analyse_cmdline_fname:
- lea.l pic_fname(a5),a0 * ファイル名を
- subq.w #1,a2 * コピー
- bsr copy_str
-
- pea.l nameck_buf(a5)
- pea.l pic_fname(a5)
- DOS _NAMECK
- addq.w #8,sp
- tst.l d0
- bmi cannot_read_err
- beq @f
- st.b wildcard_flag(a5) * ワイルドカード実行中フラグ
- @@:
- move.w #32,-(sp) * 通常ファイル
- pea.l pic_fname(a5)
- pea.l files_buf(a5)
- DOS _FILES
- lea.l 10(sp),sp
- tst.l d0
- bpl analyse_cmdline_fname_found
-
-
- .if 0
- * '.PIC' を付けてもう一度捜す
- lea.l pic_fname(a5),a0
- @@: tst.b (a0)+
- bne @b
- move.b #'.',-1(a0)
- move.b #'P',(a0)+
- move.b #'I',(a0)+
- move.b #'C',(a0)+
- clr.b (a0)+
-
- move.w #32,-(sp) * 通常ファイル
- pea.l pic_fname(a5)
- pea.l files_buf(a5)
- DOS _FILES
- lea.l 10(sp),sp
- tst.l d0
- bmi cannot_read_err
- .endif
- analyse_cmdline_fname_found:
-
-
- analyse_cmdline_fname_wildcard_loop:
-
- movem.l d1-d7/a1-a6,-(sp) **
-
- lea.l pic_fname(a5),a0 * パス名を
- lea.l nameck_buf(a5),a2 * コピー
- bsr copy_str
- lea.l files_buf+30(a5),a2 * ファイル名をコピー
- bsr copy_str
-
- * 拡張子によって file_type(a5) を設定
- lea.l nameck_buf+$56(a5),a0 * a0.l = 拡張子
- cmpi.b #'.',(a0)+
- bne 3f
- cmpi.b #'G',(a0)
- beq 1f
- cmpi.b #'g',(a0)
- bne 3f
- 1: addq.w #1,a0
- cmpi.b #'L',(a0)
- beq 2f
- cmpi.b #'l',(a0)
- bne 3f
- 2: addq.w #1,a0
- cmpi.b #'3',(a0)
- bne 3f
- st.b file_type(a5) * .GL3
- bra 4f
-
- 3: sf.b file_type(a5) * .PIC
- 4:
- bsr disp * 表示
-
- movem.l (sp)+,d1-d7/a1-a6 **
-
- bmi analyse_cmdline_rts
-
- tst.b wildcard_flag(a5)
- beq @f
-
- pea.l files_buf(a5)
- DOS _NFILES
- addq.w #4,sp
- tst.l d0
- bpl analyse_cmdline_fname_wildcard_loop
- @@:
- * ワークを初期化
- clr.b pic_fname(a5)
- sf.b wildcard_flag(a5)
- clr.b nameck_buf(a5)
- clr.b files_buf+30(a5)
- clr.w pos_x(a5)
- clr.w pos_y(a5)
- sf.b A_option_flag(a5)
- sf.b F_option_flag(a5)
-
- bra analyse_cmdline_next
-
-
- analyse_cmdline_option:
- move.b (a2)+,d0
- beq usage
- andi.b #$df,d0
- cmpi.b #'W',d0
- beq W_option
- cmpi.b #'C',d0
- beq C_option
- cmpi.b #'S',d0
- beq S_option
- cmpi.b #'D',d0
- beq D_option
- cmpi.b #'M',d0
- beq M_option
- cmpi.b #'L',d0
- beq L_option
- cmpi.b #'I',d0
- beq I_option
- cmpi.b #'K',d0
- beq K_option
- cmpi.b #'T',d0
- beq T_option
- cmpi.b #'Z',d0
- beq Z_option
- cmpi.b #'Y',d0
- beq Y_option
- cmpi.b #'A',d0
- beq A_option
- cmpi.b #'N',d0
- beq N_option
- cmpi.b #'F',d0
- beq F_option
- bra usage
-
-
- W_option:
- move.b (a2),d0
- beq usage
- cmpi.b #'r',d0
- beq W_option_r
- cmpi.b #'R',d0
- bne W_option_fname
- W_option_r:
- move.b 1(a2),d0
- beq W_option_random
- cmpi.b #' ',d0
- beq W_option_random
- cmpi.b #$09,d0
- bne W_option_fname * R で始まるファイル名だった
- W_option_random:
- addq.w #1,a2
- st.b WR_option_flag(a5)
- bra analyse_cmdline_loop
- W_option_fname: * -Wfilename の時
- lea.l wl_fname(a5),a0 * .wl ファイル名をコピー
- bsr copy_str
- bra analyse_cmdline_loop
-
-
- C_option:
- st.b C_option_flag(a5)
- st.b C_option_flag2(a5)
- * -C の後にファイル名が有るか?
- move.b (a2),d0
- beq analyse_cmdline_loop
- cmpi.b #' ',d0
- beq analyse_cmdline_loop
- cmpi.b #$09,d0
- beq analyse_cmdline_loop
- cmpi.b #$0d,d0
- beq analyse_cmdline_loop
- cmpi.b #$0a,d0
- beq analyse_cmdline_loop
- cmpi.b #$1a,d0
- beq analyse_cmdline_loop
- * -CR か?
- cmpi.b #'r',d0
- beq C_option_r
- cmpi.b #'R',d0
- bne C_option_fname
- C_option_r:
- move.b 1(a2),d0
- beq C_option_random
- cmpi.b #' ',d0
- beq C_option_random
- cmpi.b #$09,d0
- beq C_option_random
- cmpi.b #$0d,d0
- beq C_option_random
- cmpi.b #$0a,d0
- beq C_option_random
- cmpi.b #$1a,d0
- bne C_option_fname * R で始まるファイル名だった
- C_option_random:
- addq.w #1,a2
- st.b CR_option_flag(a5)
- bra analyse_cmdline_loop
- C_option_fname:
- lea.l clear_wl_fname(a5),a0 * .wl ファイル名をコピー
- bsr copy_str
- bra analyse_cmdline_loop
-
-
- S_option:
- bsr dec_to_bin
- move.l d0,S_option_speed(a5)
- bra analyse_cmdline_loop
-
-
- D_option:
- bsr dec_to_bin
- move.l d0,D_option_speed(a5)
- bra analyse_cmdline_loop
-
-
- L_option:
- st.b L_option_flag(a5)
- bsr dec_to_bin
- move.w d0,pos_x(a5)
- moveq.l #0,d0
- cmpi.b #',',(a2)
- bne @f
- addq.w #1,a2
- bsr dec_to_bin
- @@: move.w d0,pos_y(a5)
- bra analyse_cmdline_loop
-
-
- M_option:
- st.b M_option_flag(a5)
- bra analyse_cmdline_loop
-
-
- I_option:
- lea.l indirect_fname(a5),a0 * インダイレクトファイル名をコピー
- bsr copy_str
-
- pea.l indirect_fname(a5)
- bsr load_text
- addq.w #4,sp
- tst.l d0
- bmi indirect_err
- movea.l a0,a2 * ここから a2.l はインダイレクトファイル中を指す
- bra analyse_cmdline_loop
-
-
- K_option:
- st.b K_option_flag(a5)
- bra analyse_cmdline_loop
-
-
- T_option:
- bsr fdec_to_bin
- move.l d0,time0(a5)
- cmpi.b #',',(a2)
- bne analyse_cmdline_loop
- addq.w #1,a2
- bsr fdec_to_bin
- move.l d0,time1(a5)
- bra analyse_cmdline_loop
-
-
- Z_option: * -Z[num0],[num1]
- bsr dec_to_bin
- tst.w d0
- bne @f
- moveq.l #1,d0
- @@: move.w d0,zm_track(a5)
- cmpi.b #',',(a2)
- bne analyse_cmdline_loop
- addq.w #1,a2
- bsr dec_to_bin
- move.l d0,zm_counter(a5)
-
- bsr check_zmusic
- tst.l d0
- bne no_zmusic_err * zmusic が常駐していない
-
- move.w zm_track(a5),d2 * 指定トラックの
- ZMUSIC get_play_work * ワークを取得
- move.l a0,zm_track_work(a5)
-
- bra analyse_cmdline_loop
- no_zmusic_err:
- moveq.l #16,d0
- lea.l no_zmusic_err_strZ(pc),a0
- bra TINI_err
-
-
- check_zmusic: * zmusic 常駐チェック
- * out d0.l = 0 : 常駐確認
- * < 0 : 常駐していない
- movem.l d7/a1,-(sp)
-
- suba.l a1,a1
- IOCS _B_SUPER **
- move.l d0,a1
-
- move.l $8c.w,a0
- subq.w #8,a0
- cmpi.l #'ZmuS',(a0)+
- bne check_zmusic_err
- cmpi.w #'iC',(a0)+
- bne check_zmusic_err
- moveq.l #0,d7
- check_zmusic_rts:
- IOCS _B_SUPER **
- move.l d7,d0
- movem.l (sp)+,d7/a1
- rts
-
- check_zmusic_err:
- moveq.l #-1,d7
- bra check_zmusic_rts
-
-
- Y_option:
- st.b Y_option_flag(a5)
- bra analyse_cmdline_loop
-
-
- A_option:
- st.b A_option_flag(a5)
- bra analyse_cmdline_next
-
-
- N_option:
- st.b N_option_flag(a5)
- bra analyse_cmdline_loop
-
-
- F_option:
- st.b F_option_flag(a5)
- bsr dec_to_bin
- tst.b d0
- beq @f
- moveq.l #-1,d0
- @@: move.b d0,F_option_mode(a5)
- bra analyse_cmdline_loop
-
-
-
- *********************************************************
- TINI:
- move.l a5,d0
- beq TINI_no_a5
-
- movea.l tini_usp(a5),sp * スタックを一気に戻す
-
- move.l wl_ptr(a5),-(sp)
- beq @f
- DOS _MFREE
- @@: addq.w #4,sp
-
-
- move.l clear_wl_ptr(a5),-(sp)
- beq @f
- DOS _MFREE
- @@: addq.w #4,sp
-
- move.l virtual_gvram(a5),-(sp)
- beq @f
- DOS _MFREE
- @@: addq.w #4,sp
-
- tst.b old_csrswitch(a5)
- beq @f
- tst.b N_option_flag(a5)
- bne @f
- IOCS _OS_CURON
- @@:
-
-
- IOCS _MS_CUROF
- moveq.l #-1,d1
- IOCS _SKEY_MOD
- moveq.l #0,d1
- IOCS _MS_SEL
-
- clr.w -(sp)
- DOS _KFLUSH
- addq.w #2,sp
-
- TINI_no_a5:
- move.w exit_code(pc),-(sp)
- beq TINI_success
-
- move.l err_message(pc),-(sp)
- DOS _PRINT
- addq.w #4,sp
- bra TINI_exit
-
- TINI_success: * 正常終了の場合、カーソルを最下段に
- move.w #31,-(sp) * Y
- move.w #0,-(sp) * X
- move.w #3,-(sp)
- DOS _CONCTRL
- addq.w #6,sp
-
- TINI_exit:
- pea.l (a5)
- beq @f
- DOS _MFREE
- @@: addq.w #4,sp
-
- DOS _EXIT2
-
-
-
- **** ****
- less_mem_err:
- call_fpic_keep_less_mem_err:
- moveq.l #1,d0
- lea.l less_mem_err_strZ(pc),a0
- bra TINI_err
- tgusemd_err:
- moveq.l #5,d0
- lea.l tgusemd_err_strZ(pc),a0
- bra TINI_err
-
- indirect_err:
- moveq.l #1,d0
- lea.l indirect_err_strZ(pc),a0
- bra TINI_err
-
- call_fpic_keep_err:
- cmpi.b #-1,d0
- beq call_fpic_keep_cannot_read_err
- cmpi.b #-2,d0
- beq call_fpic_keep_not_pic_err
- cmpi.b #-3,d0
- beq call_fpic_keep_less_mem_err
- bra call_fpic_keep_not_support_err
-
- cannot_read_err:
- call_fpic_keep_cannot_read_err:
- moveq.l #7,d0
- lea.l fpic_cannot_open_err_strZ(pc),a0
- bra TINI_err
- call_fpic_keep_not_pic_err:
- moveq.l #2,d0
- lea.l fpic_not_pic_err_strZ(pc),a0
- bra TINI_err
- call_fpic_keep_not_support_err:
- moveq.l #2,d0
- lea.l fpic_not_support_err_strZ(pc),a0
- bra TINI_err
-
- call_fpic_disp_err:
- moveq.l #9,d0
- lea.l fpic_illegal_err_strZ(pc),a0
- bra TINI_err
- call_fpic_pos_err:
- moveq.l #1,d0
- lea.l fpic_pos_err_strZ(pc),a0
- bra TINI_err
- usage:
- moveq.l #4,d0
- lea.l usage_strZ(pc),a0
- bra TINI_err
-
- load_gl3_read_err:
- moveq.l #10,d0
- lea.l load_gl3_read_err_strZ(pc),a0
- bra TINI_err
-
- TINI_err:
- movem.l a1,-(sp)
- lea.l exit_code(pc),a1
- move.w d0,(a1)
- move.l a0,err_message-exit_code(a1)
- movem.l (sp)+,a1
-
- DOS _ALLCLOSE
- bra TINI
-
-
-
- *********************************************************
- copy_str: * 文字列をコピー
- * in : a0.l = コピー先
- * a2.l = コピー元(終端は $00 又はスペース又はタブ又は改行又は EOF)
- * out : a0.l = コピー先(終端は $00 )
- * a2.l = コピー元の次のアドレス
- bsr skip_space
- copy_str_loop:
- move.b (a2)+,d0
- beq copy_str_rts
- cmpi.b #' ',d0
- beq copy_str_rts
- cmpi.b #$09,d0
- beq copy_str_rts
- cmpi.b #$0d,d0
- beq copy_str_rts
- cmpi.b #$0a,d0
- beq copy_str_rts
- cmpi.b #$1a,d0
- beq copy_str_rts
- move.b d0,(a0)+
- bra copy_str_loop
-
- copy_str_rts:
- clr.b (a0)
- subq.w #1,a2
- rts
-
-
- **** ****
- dec_to_bin: * 10進/16進($hhhh)文字列をバイナリ値(ワード)に
- * in : a2.l = 変換する文字列のアドレス
- * out : d0.l = 変換後の数値
- * a2.l = 次のアドレス
- movem.l d1,-(sp)
- bsr skip_space
- moveq.l #0,d0
- moveq.l #0,d1
- dec_to_bin_loop:
- move.b (a2)+,d1
-
- cmpi.b #'0',d1
- bcs dec_to_bin_rts
- cmpi.b #'9',d1
- bhi dec_to_bin_rts
- subi.b #'0',d1
- mulu.w #10,d0
- add.w d1,d0
- bra dec_to_bin_loop
- dec_to_bin_rts:
- subq.w #1,a2
- movem.l (sp)+,d1
- rts
-
-
- **** ****
- fdec_to_bin: * 10進文字列(小数点2桁)をバイナリ値(ロングワード)に
- * in : a2.l = 変換する文字列のアドレス
- * out : d0.l = 変換後の数値*100 ←ここがポイント
- * a2.l = 次のアドレス
- movem.l d1,-(sp)
- bsr skip_space
- moveq.l #0,d0
- moveq.l #0,d1
- fdec_to_bin_loop:
- move.b (a2)+,d1
-
- subi.b #'0',d1
- bmi fdec_to_bin_period
- cmpi.b #9,d1
- bhi fdec_to_bin_period
- bsr mulul_d0 * d0.l を10倍
- add.l d1,d0
- bra fdec_to_bin_loop
-
- fdec_to_bin_period:
- addi.b #'0',d1
- cmpi.b #'.',d1
- bne fdec_to_bin_int_rts
-
- move.b (a2)+,d1
- subi.b #'0',d1
- bmi fdec_to_bin_int_rts
- cmpi.b #9,d1
- bhi fdec_to_bin_int_rts
- bsr mulul_d0 * d0.l を10倍
- add.l d1,d0
-
- move.b (a2)+,d1
- subi.b #'0',d1
- bmi fdec_to_bin_01_rts
- cmpi.b #9,d1
- bhi fdec_to_bin_01_rts
- bsr mulul_d0 * d0.l を10倍
- add.l d1,d0
- addq.w #1,a2
- bra fdec_to_bin_rts
- fdec_to_bin_01_rts: * 小数点以下1桁
- bsr mulul_d0 * d0.l を10倍
- addq.w #1,a2
- bra fdec_to_bin_rts
- fdec_to_bin_int_rts: * 整数
- bsr mulul_d0 * d0.l を10倍
- bsr mulul_d0 * d0.l を10倍
- fdec_to_bin_rts:
- subq.w #1,a2
- movem.l (sp)+,d1
- rts
-
-
- **** ****
- mulul_d0: * d0.l を10倍する( FLOATn 無しでも動作するように自前で計算)
- movem.l d1,-(sp)
- add.l d0,d0
- move.l d0,d1
- lsl.l #2,d0
- add.l d1,d0
- movem.l (sp)+,d1
- rts
-
-
- **** ****
- skip_space: * スペース、タブを読み飛ばす
- * in : a2.l = 処理するアドレス
- * out : a2.l = 次のアドレス(スペース、タブの次の文字を指す)
- move.b (a2)+,d0
- cmpi.b #' ',d0
- beq skip_space
- cmpi.b #$09,d0
- beq skip_space
- subq.w #1,a2
- rts
-
-
-
- *********************************************************
- disp: * 表示!
- sf.b C_option_flag2(a5)
-
- IOCS _ONTIME
- move.l d0,time_1st(a5)
-
- bsr set_mouse_cursor
-
- moveq.l #0,d0
- moveq.l #0,d1
- bsr time_wait * [BREAK] [ESC] チェック
- bmi disp_rts
-
-
- tst.b pic_fname(a5)
- beq disp_malloc_end * .PIC ファイル名が指定されていなかった場合
- tst.b file_type(a5)
- bne disp_malloc * .GL3 の場合
- tst.b Y_option_flag(a5)
- bne disp_malloc * -Y オプションが指定されている場合
- tst.b WR_option_flag(a5)
- bne disp_malloc * -WR オプションが指定されていた場合
- tst.b wl_fname(a5)
- beq disp_malloc_end * .WL ファイル名が指定されていなかった場合
- disp_malloc:
- move.l virtual_gvram(a5),d0
- bne @f
- move.l #512*512*2,-(sp)
- DOS _MALLOC
- addq.w #4,sp
- tst.l d0
- bmi less_mem_err
- move.l d0,virtual_gvram(a5)
- @@:
- tst.b file_type(a5)
- bne 1f
-
- * .PIC の場合
- FP_SETB d0 * .PIC 展開先をメインメモリ上に
- moveq.l #0,d0
- bsr call_fpic * メインメモリ上に .PIC 展開
- bra 2f
- 1: * .GL3 の場合
- movea.l d0,a0 * .GL3 展開先をメインメモリ上に
- moveq.l #0,d0
- bsr load_gl3 * メインメモリ上に .GL3 展開
- 2:
- bsr chroma_key
- disp_malloc_end:
-
-
-
- bsr wl_load_sub * 表示用/クリア用ワイプライブラリを読み込む
- bsr reset_mouse_cursor
-
- move.l time_1st(a5),d0
- move.l time1(a5),d1
- bsr time_wait
- bmi disp_rts
-
- tst.w zm_track(a5)
- beq @f
- bsr zmusic_wait
- bmi disp_rts * [BREAK] [ESC] が押された
- @@:
- moveq.l #0,d0
- moveq.l #0,d1
- bsr time_wait * [BREAK] [ESC] チェック
- bmi disp_rts
-
- suba.l a1,a1
- IOCS _B_SUPER
- move.l d0,-(sp) **
-
-
- **** **** 画面クリア
- disp_clear:
- tst.b init_screen_1st_flag(a5)
- beq @f
- bsr init_screen * 初回のみ画面初期化
- sf.b init_screen_1st_flag(a5)
- tst.l d0 * 画面をクリアしてしまったので
- bmi disp_clear_end * -C オプションの処理はなし
- @@:
-
- * -C オプションの処理
- tst.b C_option_flag(a5)
- beq disp_clear_end
- tst.b clear_wl_fname(a5)
- bne disp_clear_wipe
-
- * -C オプションのみ(ワイプライブラリ指定無し)の場合
- bsr vdisp_fast
- IOCS _G_CLR_ON
- move.w #$002f,VCTRL_R03 * 半透明OFF、グラフィック表示ON
- bra disp_clear_end
-
- disp_clear_wipe: * -Cワイプライブラリ名(ワイプライブラリ指定有り)の場合
- move.w #$002f,VCTRL_R03 * 半透明OFF、グラフィック表示ON
-
- pea.l vdisp_fast(pc)
- move.l clear_speed(a5),-(sp)
- pea.l GVRAM * 転送先
- pea.l TEXTVRAM * 転送元( $00 の入った512Kバイトのメモリ)
- movea.l clear_wl_entry(a5),a0
- jsr (a0) * 画面ワイプクリア
- lea.l 16(sp),sp
-
- disp_clear_end:
-
- moveq.l #0,d0
- moveq.l #0,d1
- bsr time_wait * [BREAK] [ESC] チェック
- bmi disp_rts_super
-
-
- **** **** .PIC 表示
- disp_pic:
- tst.b pic_fname(a5)
- beq disp_pic_end * .PIC ファイル名が指定されていなかった場合
-
- tst.b init_screen_1st_flag(a5)
- beq @f
- bsr init_screen * 初回のみ画面初期化
- sf.b init_screen_1st_flag(a5)
- @@:
- tst.b wl_fname(a5)
- bne @f * .WL ファイル名が指定されていた場合
- tst.b file_type(a5)
- bne 1f * .GL3 の場合
- tst.b Y_option_flag(a5)
- beq disp_pic_direct * .WL ファイル名指定なし、-Y オプション指定なしの場合
- 1: * .WL 無しで -Y オプションが指定された場合
- * .GL3 で .WL ファイルが指定されなかった場合
- clr.l speed(a5)
- lea.l trans512k(pc),a0
- move.l a0,wl_entry(a5)
- @@:
-
- move.b square_flag(a5),d0
- tst.b F_option_flag(a5)
- beq @f
- move.b F_option_mode(a5),d0
- @@: bsr set_mod
-
- pea.l vdisp_fast(pc)
- move.l speed(a5),-(sp)
- pea.l GVRAM
- move.l virtual_gvram(a5),-(sp)
- movea.l wl_entry(a5),a0
- jsr (a0) * 画面ワイプ表示
- lea.l 16(sp),sp
- move.l d0,d1
- bra disp_pic_end
-
- disp_pic_direct: * GVRAM に直接展開( .WL 指定なし、-Y オプションなし)
- moveq.l #-1,d0
- tst.b F_option_flag(a5)
- beq @f
- move.b F_option_mode(a5),d0
- bsr set_mod
- moveq.l #0,d0
- @@:
- * .PIC の場合
- FP_SETB #GVRAM * .PIC 展開先を GVRAM 上に
- bsr call_fpic
-
- disp_pic_end:
-
-
- tst.b A_option_flag(a5)
- beq disp_aspect_end
- sf.b A_option_flag(a5)
-
- tst.b init_screen_1st_flag(a5)
- beq @f
- bsr init_screen * 初回のみ画面初期化
- sf.b init_screen_1st_flag(a5)
- @@:
- bsr aspect
- disp_aspect_end:
-
- movea.l (sp)+,a1 **
- IOCS _B_SUPER
-
-
- IOCS _ONTIME
- move.l time0(a5),d1
- beq @f
- bsr time_wait
- bra disp_rts
- @@:
- tst.l time1(a5)
- bne disp_rts_0
-
- * キー入力待ちの処理
- tst.b K_option_flag(a5)
- beq @f
-
- moveq.l #0,d0
- moveq.l #-1,d1
- bsr time_wait
- bra disp_rts
- @@:
-
- disp_rts_0:
- moveq.l #0,d0
- disp_rts:
- rts
-
- disp_rts_super: * スーパーバイザモード時
- movea.l (sp)+,a1 **
- IOCS _B_SUPER
-
- moveq.l #-1,d0 * 返り値
- rts
-
- *********************************************************
- init_screen: * 起動時の画面初期化
- * out : d0.l = 0 : クリア処理有り
- * < 0 : 〃 処理無し
- * (起動時に 65536 色で無かったため画面をクリアした)
- movem.l d1,-(sp)
-
- move.w VCTRL_R03,d0
- andi.w #$000f,d0
- cmpi.w #$000f,d0 * グラフィック表示OFF?
- bne init_screen_other
-
- move.w VCTRL_R01,d0
- andi.w #$0007,d0
- cmpi.w #3,d0 * 65536 色モード?
- bne init_screen_other
-
- move.w CRTC_R20,d0
- andi.w #$071f,d0 * 一応
- cmpi.w #$0315,d0 * 512x512 65536 色 HIGH モード?
- beq init_screen_512
- cmpi.w #$0305,d0 * 512x512 65536 色 LOW モード?
- beq init_screen_512
- cmpi.w #$0316,d0 * 768x512 65536 色 HIGH モード?
- bne init_screen_other
-
- init_screen_768:
- tst.b init_screen_1st_flag(a5)
- beq @f
- bsr vdisp_fast * 画面をいじる時は必ず待つ(鉄則)
- bsr clear_text
- @@:
- moveq.l #1,d0
- bsr set_mod
- bsr init_palet
- moveq.l #0,d0
- bra init_screen_rts
-
- init_screen_512:
- tst.b init_screen_1st_flag(a5)
- beq @f
- bsr vdisp_fast * 画面をいじる時は必ず待つ(鉄則)
- bsr clear_text
- @@:
- moveq.l #0,d0
- bsr set_mod
- bsr init_palet
- moveq.l #0,d0
- bra init_screen_rts
-
- init_screen_other:
- andi.w #$fff0,VCTRL_R03 * グラフィック表示OFF
- bsr vdisp_fast
-
- move.w #5,-(sp)
- move.w #16,-(sp) * 512x512 ドット 65536 色
- DOS _CONCTRL
- addq.w #4,sp
-
- bsr vdisp_fast
- IOCS _G_CLR_ON
-
- bsr vdisp_fast
- bsr init_palet
-
- moveq.l #-1,d0
-
- init_screen_rts:
- move.w #$002f,VCTRL_R03 * 半透明OFF、グラフィック表示ON
-
- movem.l (sp)+,d1
- rts
-
-
- *********************************************************
- .offset 0
- CRTCD_R0: ds.w 1
- CRTCD_R1: ds.w 1
- CRTCD_R2: ds.w 1
- CRTCD_R3: ds.w 1
- CRTCD_R4: ds.w 1
- CRTCD_R5: ds.w 1
- CRTCD_R6: ds.w 1
- CRTCD_R7: ds.w 1
- CRTCD_R20: ds.w 1
- .text
- .even
- set_mod: * 画面モード設定
- * メモリモード/スクエアPIC
- * /優先順位/スクロール座標を設定
- * in : d0.b = 0 : 512x512 / != 0 :768x512
- movem.l d1/a0-a1,-(sp)
-
- move.w d0,d1
- bsr vdisp_fast * 画面をいじる時は必ず待つ(鉄則)
-
- lea _512x512_64K_H(pc),a0
- tst.b d1
- beq @f
- lea _768x512_64K_H(pc),a0
- @@:
- move.b CRTCD_R20+1(a0),d0
- andi.w #%000_11111,d0
- move.b CRTM_prw(pc,d0.w),d0
- move.w CRTC_R20,d1
- andi.w #%000_11111,d1
- cmp.b CRTM_prw(pc,d1.w),d0
- bls set_mod_low_hi
-
- set_mod_hi_low: * 高から低へ
- lea CRTC_R01,a1
- move.w CRTCD_R20(a0),d0 *
- move.w d0,CRTC_R20 * R20
- move.w (a0)+,d1 *
- move.l (a0)+,(a1)+ * R01-R02
- move.l (a0)+,(a1)+ * R03-R04
- move.l (a0)+,(a1)+ * R05-R06
- move.w (a0)+,(a1)+ * R07
- move.w d1,CRTC_R00 * R00
- lsr.w #8,d0 *
- move.w d0,VCTRL_R01 * メモリモード
- bra set_mod_rts
-
- set_mod_low_hi: * 低から高へ
- lea CRTC_R00,a1
- move.l (a0)+,(a1)+ * R00-R01
- move.l (a0)+,(a1)+ * R02-R03
- move.l (a0)+,(a1)+ * R04-R05
- move.l (a0)+,(a1)+ * R06-R07
- move.w (a0)+,d0 *
- move.w d0,CRTC_R20 * R20
- lsr.w #8,d0 *
- move.w d0,VCTRL_R01 * メモリモード
-
- set_mod_rts:
- move.b #%1110_0100,VCTRL_R02+1 * 優先順位
-
- lea.l CRTC_R12,a0 * スクロール座標
- clr.l (a0)+
- clr.l (a0)+
- clr.l (a0)+
- clr.l (a0)+
-
- movem.l (sp)+,d1/a0-a1
- rts
-
-
- * 0 1 2 3 4 5 6 7 8 9 A B C D E F
- CRTM_prw: dc.b 4,2,9,9,9,2,9,9,9,9,9,9,9,9,9,9 *0
- dc.b 3,1,9,9,9,1,0,9,9,9,9,9,9,9,9,9 *1
- .even
-
-
- *********************************************************
- init_palet: * 65536 色モードパレットを初期化
- movem.l d1-d2,-(sp)
-
- moveq.l #128-1,d0
- lea GRPALET,a0
- moveq.l #0,d1
- move.l #$0001_0001,d1
- move.l #$0202_0202,d2
- @@: move.l d1,(a0)+
- add.l d2,d1
- dbra d0,@b
-
- movem.l (sp)+,d1-d2
- rts
-
-
- *********************************************************
- call_fpic: * 実際に FPIC を呼ぶ
- * in : d0.b != 0 : 画面モード設定あり
- movem.l d1-d3,-(sp)
-
- move.b d0,d3
-
- FP_KEEP pic_fname(a5) * .PIC 読み込み
- tst.l d0
- bmi call_fpic_keep_err
-
- move.l d0,a0 * a0.l =
-
- btst.b #fpf_SQ,fpw_FLAG1(a0)
- sne.b square_flag(a5) * =$00 : 横長PIC / =$ff : スクエアPIC
-
-
- tst.b L_option_flag(a5)
- bne 2f
-
- * -L オプションなし
- btst.b #fpf_XY,fpw_FLAG1(a0) * .PIC ファイルに表示位置指定があったか?
- bne 1f
- moveq.l #0,d0
- moveq.l #0,d1
- bra call_fpic_check
- 1:
- move.w fpw_X(a0),d0 * ヘッダの座標を使用
- move.w fpw_Y(a0),d1
- bra call_fpic_check
-
- 2: * -L オプションあり
- move.w pos_x(a5),d0 * -L オプションの座標を使用
- move.w pos_y(a5),d1
-
- call_fpic_check: * ここに来る時点で d0.w = x0, d1.w = y0
-
- * 512x512 でなければ仮想GVRAMをクリア
- cmpi.w #512,fpw_H(a0)
- bne 1f
- cmpi.w #512,fpw_V(a0)
- beq 2f
- 1: tst.l virtual_gvram(a5)
- beq 2f
- bsr clear_virtual_gvram
- 2:
- * 位置指定範囲外チェック
- move.w d0,d2
- add.w fpw_H(a0),d2
- cmpi.w #512,d2
- bhi call_fpic_pos_err
- move.w d1,d2
- add.w fpw_V(a0),d2
- cmpi.w #512,d2
- bhi call_fpic_pos_err
-
- tst.b d3
- beq @f
- movem.l d0/a0,-(sp)
- move.b square_flag(a5),d0
- bsr set_mod
- movem.l (sp)+,d0/a0
- @@:
- FP_DISP a0,d0,d1
- move.l d0,d1
- FP_FREE a0
-
- tst.l d1
- bmi call_fpic_disp_err
-
- movem.l (sp)+,d1-d3
- rts
-
-
- *********************************************************
- load_gl3: * .GL3 を読み込む
- * in : d0.b != 0 : 画面モード設定あり
- * a0.l = 読み込むアドレス
- movem.l d1-d3/a0-a1,-(sp)
-
- clr.b square_flag(a5)
-
- tst.b d0
- beq @f
- movem.l d0/a0,-(sp)
- move.b square_flag(a5),d0
- bsr set_mod
- movem.l (sp)+,d0/a0
- @@:
- clr.w -(sp) * 読み込み専用
- pea.l pic_fname(a5) * ファイル名
- DOS _OPEN
- addq.w #6,sp
- tst.l d0
- bmi load_gl3_read_err
- move.w d0,d7 * d7.w = ファイルハンドル
-
- move.l #524288,-(sp) * 512Kbytes 読み込み
- pea.l (a0)
- move.w d7,-(sp)
- DOS _READ
- lea.l 10(sp),sp
- move.l d0,d1
-
- move.w d7,-(sp)
- DOS _CLOSE
- addq.w #2,sp
-
- tst.l d1
- bmi load_gl3_read_err
-
- movem.l (sp)+,d1-d3/a0-a1
- rts
-
-
- *********************************************************
- time_wait: * 指定時間待つ( [BREAK] [ESC] 検出有り)
- * -K オプション指定時にはその処理も
- * in : d0.l = 計測開始時間(単位 1/100 秒)
- * d1.l = 待つ時間(単位 1/100 秒)
- * out : d0.l = -1 ; [BREAK] [ESC] で中断された
- movem.l d2,-(sp)
-
- move.l d0,d2
- add.l d1,d2
-
- time_wait_loop:
- move.w #$00ff,-(sp)
- DOS _INPOUT
- addq.w #2,sp
- tst.w d0
- beq time_wait_not_pressed_key
-
- * 何かキーが押された
- move.w d0,-(sp) **
- clr.w -(sp)
- DOS _KFLUSH
- addq.w #2,sp
- move.w (sp)+,d0 **
-
- cmpi.b #$1b,d0 * [ESC] が押された?
- beq time_wait_abort
- cmpi.b #$03,d0 * [BREAK] が押された?
- beq time_wait_abort
-
- tst.b K_option_flag(a5)
- beq time_wait_next
- bra time_wait_rts * -K オプション指定時にキーが押されたら帰る
-
- time_wait_not_pressed_key:
- tst.b K_option_flag(a5)
- beq time_wait_next
-
- IOCS _MS_GETDT
- tst.b d0 *
- bne time_wait_abort * 右クリックされたら中断
- tst.w d0 *
- bmi time_wait_rts * 左クリックされたら帰る
-
- time_wait_next:
- IOCS _ONTIME
- cmp.l d2,d0
- bcs time_wait_loop
- time_wait_rts:
- IOCS _MS_GETDT
- tst.w d0
- bne time_wait_rts
-
- moveq.l #0,d0
- time_wait_rts_2:
- movem.l (sp)+,d2
- rts
-
-
- time_wait_abort:
- IOCS _MS_GETDT
- tst.w d0
- bne time_wait_abort
-
- moveq.l #-1,d0
- bra time_wait_rts_2
-
-
- *********************************************************
- zmusic_wait: * ZMUSIC映像同期モード( [BREAK] [ESC] 検出有り)
- * カウンターが指定の値を越えるまで待つ
- * out : d0.l = -1 ; [BREAK] [ESC] で中断された
- movem.l d1,-(sp)
-
- zmusic_wait_loop:
- move.w #$00ff,-(sp)
- DOS _INPOUT
- addq.w #2,sp
- tst.w d0
- beq zmusic_wait_not_pressed_key
-
- * 何かキーが押された
- move.w d0,-(sp) **
- clr.w -(sp)
- DOS _KFLUSH
- addq.w #2,sp
- move.w (sp)+,d0 **
-
- cmpi.b #$1b,d0 * [ESC] が押された?
- beq zmusic_wait_abort
- cmpi.b #$03,d0 * [BREAK] が押された?
- beq zmusic_wait_abort
-
- tst.b K_option_flag(a5)
- beq zmusic_wait_next
- bra zmusic_wait_rts * -K オプション指定時にキーが押されたら帰る
-
- zmusic_wait_not_pressed_key:
- tst.b K_option_flag(a5)
- beq zmusic_wait_next
-
- IOCS _MS_GETDT
- tst.b d0 *
- bne zmusic_wait_abort * 右クリックされたら中断
- tst.w d0 *
- bmi zmusic_wait_rts * 左クリックされたら帰る
-
- zmusic_wait_next:
- movea.l zm_track_work(a5),a0
- move.l p_total(a0),d0 * d0.l = トータルカウント
- cmp.l zm_counter(a5),d0
- bcs zmusic_wait_loop
- zmusic_wait_rts:
- IOCS _MS_GETDT
- tst.w d0
- bne zmusic_wait_rts
-
- moveq.l #0,d0
- zmusic_wait_rts_2:
- movem.l (sp)+,d1
- rts
-
-
- zmusic_wait_abort:
- IOCS _MS_GETDT
- tst.w d0
- bne zmusic_wait_abort
-
- moveq.l #-1,d0
- bra zmusic_wait_rts_2
-
-
- *********************************************************
- wl_load_sub: * 画面表示用ワイプライブラリ読み込み
-
- * まずクリア用ワイプライブラリ
- tst.b C_option_flag(a5)
- beq wl_load_sub_clear_rts
-
- move.l clear_wl_ptr(a5),-(sp)
- beq @f
- DOS _MFREE
- @@: addq.w #4,sp
-
- tst.b CR_option_flag(a5)
- beq @f
- lea.l clear_wl_fname(a5),a0
- bsr wl_load_sub_random
- @@:
- moveq.l #7,d0 * 引き数
- lea.l clear_wl_fname(a5),a0 *
- tst.b (a0)
- beq @f
- bsr wl_load * クリア用ワイプライブラリを読み込む
- tst.l d0 * エラー?
- bmi wl_load_sub_load_err
- move.l a0,clear_wl_ptr(a5) *
- move.l a1,clear_wl_entry(a5) *
-
- @@: move.l D_option_speed(a5),d0 * 指定値 <= 最大値
- cmp.l d0,d1 * なら問題無い
- bcc @f
- tst.b CR_option_flag(a5)
- beq wl_load_sub_speed_err
- move.l d1,d0 * -CR オプション付きなら 最大値 = 指定値
- @@: move.l d0,clear_speed(a5)
-
- wl_load_sub_clear_rts:
-
-
- * 次に表示用ワイプライブラリ
- tst.b wl_fname(a5)
- bne wl_load_sub_fname
- tst.b WR_option_flag(a5)
- bne wl_load_sub_fname
- * .wl ファイル名が指定されていなかった時
- tst.l speed(a5)
- bne wl_load_sub_speed_err
- bra wl_load_sub_rts
-
- wl_load_sub_fname:
- move.l wl_ptr(a5),-(sp)
- beq @f
- DOS _MFREE
- @@: addq.w #4,sp
-
- tst.b WR_option_flag(a5)
- beq @f
- lea.l wl_fname(a5),a0
- bsr wl_load_sub_random
- @@:
- moveq.l #7,d0 * 引き数
- lea.l wl_fname(a5),a0 *
- bsr wl_load * 表示用ワイプライブラリを読み込む
- tst.l d0 * エラー?
- bmi wl_load_sub_load_err
- move.l a0,wl_ptr(a5) *
- move.l a1,wl_entry(a5) *
-
- move.l S_option_speed(a5),d0 * 指定値 <= 最大値
- cmp.l d0,d1 * なら問題無い
- bcc @f
- tst.b WR_option_flag(a5)
- beq wl_load_sub_speed_err
- move.l d1,d0 * -WR オプション付きなら 最大値 = 指定値
- @@: move.l d0,speed(a5)
-
- wl_load_sub_rts
- moveq.l #0,d0
- rts
-
- wl_load_sub_speed_err:
- moveq.l #12,d0
- lea.l wl_load_sub_speed_err_strZ(pc),a0
- bra TINI_err
-
-
- **** ****
- wl_load_sub_load_err:
- cmpi.l #-2,d0
- beq wl_load_sub_less_mem_err
- cmpi.l #-3,d0
- beq wl_load_sub_not_wl_err
-
- moveq.l #10,d0
- lea.l wl_load_sub_open_err_strZ(pc),a0
- bra TINI_err
-
- wl_load_sub_less_mem_err:
- moveq.l #14,d0
- lea.l wl_load_sub_less_mem_err_strZ(pc),a0
- bra TINI_err
-
- wl_load_sub_not_wl_err:
- moveq.l #14,d0
- lea.l wl_load_sub_not_wl_err_strZ(pc),a0
- bra TINI_err
-
-
- **** ****
- wl_load_sub_random:
-
- .offset -92-54
- wc_path: .ds.b 92
- wc_files_buf: .ds.b 54
- .text
-
- link a6,#-92-54
- movem.l d1-d7/a1-a5,-(sp)
- move.l a0,d5 * d5.l =
-
-
- move.l #23*1024,-(sp)
- DOS _MALLOC
- addq.w #4,sp
- tst.l d0
- bmi less_mem_err
- move.l d0,a3 * a3.l =
- move.l d0,a4 * a4.l =
-
-
- lea.l wc_path(a6),a5 * a5.l =
- lea.l wild_wl_strZ(pc),a0 * '*.wl'
- @@: move.b (a0)+,(a5)+
- bne @b
-
- move.w #32,-(sp)
- pea.l wc_path(a6)
- pea.l wc_files_buf(a6)
- DOS _FILES
- lea.l 10(sp),sp
- tst.l d0
- beq wl_load_sub_random_found
-
- * 自分自身のパス名を付けてもう一度
- lea.l wc_path(a6),a5 * a5.l =
- DOS _GETPDB
- movea.l d0,a0
- adda.w #$80-$10,a0
- @@: move.b (a0)+,(a5)+
- bne @b
- subq.w #1,a5
- lea.l wild_wl_strZ(pc),a0 * '*.wl'
- @@: move.b (a0)+,(a5)+
- bne @b
-
- move.w #32,-(sp)
- pea.l wc_path(a6) * パス名+'*.wl'
- pea.l wc_files_buf(a6)
- DOS _FILES
- lea.l 10(sp),sp
- tst.l d0
- beq wl_load_sub_random_found
-
- * 環境変数 WL_path のパス名を付けてもう一度
- lea.l wc_path(a6),a5 * a5.l =
-
- pea.l (a5)
- clr.l -(sp)
- pea.l WL_path_strZ(pc)
- DOS _GETENV
- lea.l 12(sp),sp
- tst.l d0
- bmi wl_load_sub_random_no_wl_err
- @@: tst.b (a5)+
- bne @b
- subq.w #1,a5
- lea.l wild_wl_strZ(pc),a0 * '*.wl'
- @@: move.b (a0)+,(a5)+
- bne @b
-
- move.w #32,-(sp)
- pea.l wc_path(a6) * パス名+'*.wl'
- pea.l wc_files_buf(a6)
- DOS _FILES
- lea.l 10(sp),sp
- tst.l d0
- bmi wl_load_sub_random_no_wl_err
-
-
- wl_load_sub_random_found:
- moveq.l #1,d6 * d6.l = 見つけた .wl ファイルの数
- wl_load_sub_random_loop:
- movea.l a4,a1
- lea.l wc_files_buf+30(a6),a0
- @@: move.b (a0)+,(a1)+
- bne @b
- lea.l 23(a4),a4
-
- pea.l wc_files_buf(a6)
- DOS _NFILES
- addq.w #4,sp
- tst.l d0
- bmi wl_load_sub_random_rts
- addq.w #1,d6
- cmpi.w #1024,d6
- bcs wl_load_sub_random_loop
- wl_load_sub_random_rts:
-
-
- IOCS _ONTIME * 乱数の種に使用
- add.l d1,d0
- swap.w d0 *
- clr.w d0 * オーバーフロー防止
- swap.w d0 *
- divu.w d6,d0
- swap.w d0
- mulu.w #23,d0
-
- lea.l (a3,d0.w),a0
- subq.w #5,a5 * '*.wl',0 で5文字
- @@: move.b (a0)+,(a5)+
- bne @b
-
- lea.l wc_path(a6),a0
- movea.l d5,a1
- @@: move.b (a0)+,(a1)+
- bne @b
-
- pea.l (a3)
- DOS _MFREE
- addq.w #4,sp
-
- movem.l (sp)+,d1-d7/a1-a5
- moveq.l #0,d7
- unlk a6
- rts
-
-
- wl_load_sub_random_no_wl_err:
- moveq.l #10,d7
- lea.l no_wl_err_strZ(pc),a0
- bra TINI_err
-
-
- *********************************************************
- clear_text: * テキスト画面クリア(スーパーで呼ぶこと)
- movem.l d1/a1,-(sp)
-
- lea.l CRTC_R21,a1 * a1.l =
-
- move.w (a1),-(sp) **
- andi.w #$fdff,(a1) * ビットマスクオフ
- ori.w #$01ff,(a1) * ラスターコピー同時アクセスオン
-
- lea.l TEXTVRAM,a0
- moveq.l #0,d0
- moveq.l #128*4/16-1,d1
- @@: move.l d0,(a0)+ * テキスト4ラスター分だけ自力でクリア
- move.l d0,(a0)+
- move.l d0,(a0)+
- move.l d0,(a0)+
- dbra d1,@b
-
- lea.l GPIP_DATA,a0 * a0.l =
-
- * move.w sr,-(sp) * 本当は割り込み停止した方がよい
- * ori.w #$0700,sr * (が、音楽演奏に影響を与えてしまうので)
- moveq.l #1,d0
- move.w #256-1,d1
- clear_text_raster_copy_loop
- tst.b (a0)
- bmi clear_text_raster_copy_loop
- @@: tst.b (a0)
- bpl @b
- move.w d0,2(a1) * CRTC_R22 水平表示→同期期間になった瞬間に設定
- bset.b #3,CRTC_PORT+1 * ラスターコピー開始
- addq.w #1,d0
- dbra d1,clear_text_raster_copy_loop
-
-
- @@: tst.b (a0)
- bmi @b
- @@: tst.b (a0)
- bpl @b * 水平表示→同期期間になった瞬間に
- bclr.b #3,CRTC_PORT+1 * ラスターコピー停止
-
- * move.w (sp)+,sr
- move.w (sp)+,(a1) **
-
- movem.l (sp)+,d1/a1
- rts
-
-
- *********************************************************
- clear_virtual_gvram: * 仮想VRAMをクリア
- movem.l d0-d7/a0-a1,-(sp)
-
- movea.l virtual_gvram(a5),a0
- adda.l #512*512*2,a0
- moveq.l #0,d1
- moveq.l #0,d2
- moveq.l #0,d3
- moveq.l #0,d4
- moveq.l #0,d5
- moveq.l #0,d6
- moveq.l #0,d7
- movea.l d1,a1
-
- move.w #512*512*2/4/8/8-1,d0
- @@:
- movem.l d1-d7/a1,-(a0)
- movem.l d1-d7/a1,-(a0)
- movem.l d1-d7/a1,-(a0)
- movem.l d1-d7/a1,-(a0)
- movem.l d1-d7/a1,-(a0)
- movem.l d1-d7/a1,-(a0)
- movem.l d1-d7/a1,-(a0)
- movem.l d1-d7/a1,-(a0)
- dbra d0,@b
-
- movem.l (sp)+,d0-d7/a0-a1
- rts
-
-
-
- *********************************************************
- aspect: * アスペクト比調整用画像表示
- movem.l d1-d3/a1,-(sp)
-
- lea.l aspect_box_1(pc),a1
- IOCS _FILL
- lea.l aspect_box_2(pc),a1
- IOCS _FILL
- lea.l aspect_circle(pc),a1
- IOCS _CIRCLE
- lea.l aspect_line_1(pc),a1
- IOCS _LINE
- lea.l aspect_line_2(pc),a1
- IOCS _LINE
- lea.l aspect_hv_strZ(pc),a0
- lea.l aspect_hv(pc),a1
- move.l a0,4(a1)
- IOCS _SYMBOL
- lea.l aspect_ion_std_strZ(pc),a0
- lea.l aspect_ion_std(pc),a1
- move.l a0,4(a1)
- IOCS _SYMBOL
-
- moveq.l #0,d1
- moveq.l #0,d2
- moveq.l #32-1,d3
- lea.l aspect_gray_scale_1(pc),a1
- @@: move.w d1,2(a1) * Y0
- addi.w #16,d1
- move.w d1,6(a1) * Y1
- move.w d2,8(a1) * 色
- IOCS _FILL
- addi.w #1<<11+1<<6+1<<1,d2
- dbra d3,@b
-
- moveq.l #0,d1
- move.w #31<<11+31<<6+31<<1,d2
- moveq.l #32-1,d3
- lea.l aspect_gray_scale_2(pc),a1
- @@: move.w d1,2(a1) * Y0
- addi.w #16,d1
- move.w d1,6(a1) * Y1
- move.w d2,8(a1) * 色
- IOCS _FILL
- subi.w #1<<11+1<<6+1<<1,d2
- dbra d3,@b
-
- moveq.l #0,d0
-
- movem.l (sp)+,d1-d3/a1
- rts
-
-
- *********************************************************
- set_mouse_cursor: * マウスカーソルの処理
- tst.b M_option_flag(a5)
- beq @f
-
- movem.l d1/a1,-(sp)
- IOCS _MS_CURGT
- move.l d0,d1
- IOCS _MS_INIT
- IOCS _MS_CURST
- IOCS _MS_CURON
- lea.l mouse_table(pc),a1
- IOCS _MS_SEL2
- movem.l (sp)+,d1/a1
- @@:
- rts
-
-
- reset_mouse_cursor: * マウスカーソルの処理
- IOCS _MS_CUROF
- tst.b M_option_flag(a5)
- beq @f
-
- movem.l d1,-(sp)
- moveq.l #0,d1
- IOCS _MS_SEL
- movem.l (sp)+,d1
- @@:
- rts
-
-
- *********************************************************
- chroma_key: * クロマキー合成
- tst.b Y_option_flag(a5)
- beq chroma_key_rts
-
- movem.l d1/a1,-(sp)
-
- suba.l a1,a1
- IOCS _B_SUPER
- move.l d0,-(sp) **
-
- lea.l GVRAM,a0 * a0.l = 転送元
- movea.l virtual_gvram(a5),a1 * a1.l = 転送先
- move.l #512*512,d1
- chroma_key_loop:
- tst.w (a1) * 転送先が透明?
- bne chroma_key_skip
- move.w (a0)+,(a1)+
- bra chroma_key_next
- chroma_key_skip:
- addq.w #2,a0
- addq.w #2,a1
- chroma_key_next:
- subq.l #1,d1
- bne chroma_key_loop
-
- movea.l (sp)+,a1
- IOCS _B_SUPER
-
- movem.l (sp)+,d1/a1
- chroma_key_rts:
- rts
-
-
- *********************************************************
- trans512k: * .wl ファイル名が指定されていなかった時の
- * 単純転送ルーチン
- link a6,#0
- movem.l d1-d7/a0-a2,-(sp)
-
- * move.l _speed(a6),d0 * 速度が負の時は
- * bmi std_ask * 速度設定可能範囲問い合わせ
- * bne std_err * 速度が設定範囲外
-
- movea.l _source_ptr(a6),a0 * a0.l = 転送元アドレス
- movea.l _dest_ptr(a6),a1 * a1.l = 転送先アドレス
-
- move.w #512*(512/64)-1,d7
- @@: movem.l (a0)+,d0-d6/a2
- movem.l d0-d6/a2,(a1)
- movem.l (a0)+,d0-d6/a2
- movem.l d0-d6/a2,32*1(a1)
- movem.l (a0)+,d0-d6/a2
- movem.l d0-d6/a2,32*2(a1)
- movem.l (a0)+,d0-d6/a2
- movem.l d0-d6/a2,32*3(a1)
- lea.l 32*4(a1),a1
- dbra d7,@b
-
- moveq.l #0,d0
- std_rts:
- movem.l (sp)+,d1-d7/a0-a2
- unlk a6
- rts
-
- *std_err:
- * moveq.l #-1,d0
- * bra std_rts
-
-
- *std_ask:
- * moveq.l #0,d0
- * bra std_rts
-
-
- *********************************************************
- vdisp_fast:
-
- @@: btst.b #4,GPIP_DATA
- beq @b
- @@: btst.b #4,GPIP_DATA
- bne @b
-
- rts
-
-
- *********************************************************
-
- .data
- usage_strZ:
- .dc.b 'PICファイルワイプローダー Xpicw.r ver1.10',$0d,$0a
- .dc.b ' programmed by Mitsuky < FreeSoftware >',$0d,$0a
- .dc.b $0d,$0a
- .dc.b '使用法 : Xpicw [option] PICファイル名[.PIC]',$0d,$0a
- .dc.b ' PIC/GL3ファイルをワイプ表示します。',$0d,$0a
- .dc.b ' ワイプライブラリ(拡張子 .WL )に対応しています。',$0d,$0a
- .dc.b $0d,$0a
- .dc.b '[option]',$0d,$0a
- .dc.b '-Wワイプライブラリ名[.WL]',$0d,$0a
- .dc.b ' : ワイプパターンを指定。 -WR でランダム。',$0d,$0a
- .dc.b '-S[数値] : ワイプ速度',$0d,$0a
- .dc.b '-C[ワイプライブラリ名[.WL]]',$0d,$0a
- .dc.b ' : クリアワイプパターンを指定。 -CR でランダム。',$0d,$0a
- .dc.b '-D[数値] : クリア速度',$0d,$0a
- .dc.b '-L[X][,Y] : ロード位置指定',$0d,$0a
- .dc.b '-M : ファイル読み込み中、マウスカーソルをアニメーションします。',$0d,$0a
- .dc.b '-K : 表示後キー入力待ちします',$0d,$0a
- .dc.b '-T[数値0][,数値1]',$0d,$0a
- .dc.b ' : 表示後に [数値0] だけ待ちます',$0d,$0a
- .dc.b ' [数値1] を指定すると表示前に [数値1] だけ待ちます',$0d,$0a
- .dc.b ' 単位は秒(小数点以下2桁まで指定可能)です',$0d,$0a
- .dc.b '-Z[数値0,数値1]',$0d,$0a
- .dc.b ' : ZMUSIC映像同期モード',$0d,$0a
- .dc.b ' トラック [数値0] のカウンターが [数値1] を越えた時にワイプを開始します',$0d,$0a
- .dc.b '-Iインダイレクトファイル名',$0d,$0a
- .dc.b ' : インダイレクトファイルを読み込んで表示します',$0d,$0a
- .dc.b '-A : アスペクト比調整用画像を表示します',$0d,$0a
- .dc.b '-F[数値] : 強制的に横長(数値=0)または正方形(数値=1)モードで表示',$0d,$0a
- .dc.b '-N : カーソル非表示のまま終了します',$0d,$0a
- .dc.b 0
- tgusemd_err_strZ:
- .dc.b 'グラフィック画面が使用できません',$0d,$0a
- .dc.b 0
- indirect_err_strZ:
- .dc.b 'インダイレクトファイルがオープンできません',$0d,$0a
- .dc.b 0
- wl_load_sub_not_wl_err_strZ:
- .dc.b 'このファイルはワイプライブラリではありません',$0d,$0a
- .dc.b 0
- wl_load_sub_open_err_strZ:
- .dc.b 'ワイプライブラリがオープンできません',$0d,$0a
- .dc.b 0
- fpic_cannot_open_err_strZ:
- .dc.b '.PIC ファイルがオープンできません',$0d,$0a
- .dc.b 0
- fpic_not_pic_err_strZ:
- .dc.b '.PIC ファイルではありません',$0d,$0a
- .dc.b 0
- fpic_not_support_err_strZ:
- .dc.b '32768/65536 色 .PIC ファイル以外は表示できません',$0d,$0a
- .dc.b 0
- fpic_illegal_err_strZ:
- .dc.b 'この .PIC ファイルは壊れています',$0d,$0a
- .dc.b 0
- fpic_pos_err_strZ:
- .dc.b '位置指定が範囲外です',$0d,$0a
- .dc.b 0
- less_mem_err_strZ:
- wl_load_sub_less_mem_err_strZ:
- .dc.b 'メモリが足りません',$0d,$0a
- .dc.b 0
- no_wl_err_strZ:
- .dc.b 'ワイプライブラリが一つもありません',$0d,$0a
- .dc.b 0
- wl_load_sub_speed_err_strZ:
- .dc.b '-S オプションの値が不正です',$0d,$0a
- .dc.b 0
- no_zmusic_err_strZ:
- .dc.b '-Z オプションはZMUSICを常駐させてから使用して下さい',$0d,$0a
- .dc.b 0
- load_gl3_read_err_strZ:
- .dc.b '.GL3 ファイルがオープンできません',$0d,$0a
- .dc.b 0
-
- SLASH_strZ:
- .dc.b 'SLASH',0
- wild_wl_strZ:
- .dc.b '*.WL',0
- WL_path_strZ:
- .dc.b 'WL_path',0
-
-
- .even
- mouse_table:
- .dc.w 1,2,3,-1
- aspect_box_1:
- .dc.w 0,0,511,511,GRAY0,$ffff
- aspect_box_2:
- .dc.w 256-200*5/7,256-200,256+200*5/7,256+200,GRAY1,$ffff
- aspect_circle:
- .dc.w 256,256,200,GRAY0,0,360,256*7/5+1
- aspect_line_1:
- .dc.w 256,0,256,511,GRAY0,$ffff
- aspect_line_2:
- .dc.w 0,256,511,256,GRAY0,$ffff
- aspect_hv:
- .dc.w (512-9*8)/2,20
- .dc.l 0 * aspect_hv_strZ が後で入る
- .dc.b 1,1
- .dc.w GRAY1
- .dc.b 1,0
- aspect_ion_std:
- .dc.w (512-27*8)/2,512-36
- .dc.l 0 * aspect_ion_std_strZ が後で入る
- .dc.b 1,1
- .dc.w GRAY1
- .dc.b 1,0
- aspect_hv_strZ:
- .dc.b 'H:V = 7:5',0
- aspect_ion_std_strZ:
- .dc.b 'ion project standard aspect',0
-
- .even
- aspect_gray_scale_1:
- .dc.w 0,0,(512-400*5/7)/2-(512-400)/2*5/7,16,$fffe * X0/Y0/X1/Y1/色
- aspect_gray_scale_2:
- .dc.w 512-((512-400*5/7)/2-(512-400)/2*5/7),0,511,16,$fffe * X0/Y0/X1/Y1/色
-
-
- _768x512_64K_H: dc.w 137,14,44,108,567,5,40,552,%011_000_10110
- _512x512_64K_H: dc.w 91,9,17,81,567,5,40,552,%011_000_10101
-
-
-
-
- * .data セクションに取るワーク( a5.l = 0 でも使える)
-
- exit_code:
- .ds.w 1
- err_message:
- .ds.l 1
-